<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值。

    // 数组解构 => 对应下标解构

    // 完全解构
    // var [a, b, c] = [1, 2, 3];
    // console.log(a, b, c);

    // 不完全解构   => 即等号左边的模式，只匹配一部分的等号右边的数组
    // var [a, b] = [1, 2, 3];
    // console.log(a, b);

    // var [a, ,b] = [1, 2, 3];
    // console.log(a, b);


    // 如果解构不成功，变量的值就等于undefined。
    // var [a, b, c, d] = [1, 2, 3];
    // console.log(a, b, c, d);

    // 解构过程中,可以给变量设置默认值 (此时如果解构不成功,就会使用默认值)
    // var [a, b, c, d = 0] = [1, 2, 3];
    // // 等价于 d = d === undefined ? 0 : d;
    // console.log(a, b, c, d);


    // 解构过程中需要注意: 
    // 如果等号的右边不是数组（或者严格地说，不是可遍历的结构，参见《Iterator》一章），那么将会报错。
    // let [foo] = 1;
    // let [foo] = false;
    // let [foo] = NaN;
    // let [foo] = undefined;
    // let [foo] = null;
    // let [foo] = {};

    // let [a,b,c,d,e] = "hello";  // 字符串是可以遍历解构
    // console.log(a,b,c,d,e);


    // 解构高级应用

    // 1. Rest参数 => 配合扩展运算符实现Rest参数(合并剩余参数)
    // 注意: Rest参数 必须时最后一个参数
    // var [a,b,...c] = [1,2,3,4,5,6];
    // //  a => 1
    // //  b => 2
    // //  ...c => 3,4,5,6   反推 c = [3,4,5,6 ]
    // console.log(a,b,c);

    // 注意: Rest参数 必须时最后一个参数
    // 报错: Rest element must be last element
    // var [a,...c,b] = [1,2,3,4,5,6];
    // console.log(a,b,c);


    // 2. 二维或多维数组解构

    var list = [1, 2, [3, 4, [5, 6]]];

    // 拆分  => low
    // var [a,b,c] = [1, 2, [3, 4, [5, 6]]];  // a = 1   b = 2  c = [3, 4, [5, 6]]
    // var [c1,c2,c3] = c;   // c1 = 3, c2 = 4     c3 = [5,6]
    // var [c31,c32] = c3;
    // console.log(a,b,c);
    // console.log(c1,c2,c3);
    // console.log(c31,c32);

    // 本质上，这种写法属于“模式匹配”，只要等号两边的模式相同，左边的变量就会被赋予对应的值。
    // var [a,b,c] = [1, 2, [3, 4, [5, 6]]];  // a = 1   b = 2  c = [3, 4, [5, 6]]
    // var [a, b, [c1, c2, [c31, c32]]] = [1, 2, [3, 4, [5, 6]]];  
    // console.log(a, b, c1, c2, c31, c32);


    // var [a, b, [c, d, [e, f]]] = [1, 2, [3, 4, [5, 6]]];
    // console.log(a, b, c, d, e, f);

    var [a,  , [c,  , [e ]]] = [1, 2, [3, 4, [5, 6]]];
    console.log(a,c,e);









</script>

</html>